namespace Nop.Core.Domain.Shipping
{
    /// <summary>
    /// Represents the shipping status enumeration
    /// 
    /// A 32-bit integer, where bits above bit 16th are reserved as modifier!
    /// That is, each bit above bit 16th means something!
    /// But, in order to avoid having to do bit-manipulation in codes, for now I have decided
    /// to simply list all combinations when modifier bit is used.
    /// 
    /// </summary>
    public enum ShippingStatus : int
    {
        /// <summary>
        /// Shipping not required
        /// </summary>
        ShippingNotRequired = 10,
        /// <summary>
        /// Not yet ready
        /// </summary>
        NotYetReady = 15,
        /// <summary>
        /// Not yet shipped
        /// </summary>
        NotYetShipped = 20,
        /// <summary>
        /// Partially shipped
        /// </summary>
        PartiallyShipped = 25,
        /// <summary>
        /// Shipped
        /// </summary>
        Shipped = 30,
        /// <summary>
        /// Delivered
        /// </summary>
        Delivered = 40,
        /// <summary>
        /// ReadyForPickUp
        /// </summary>
        ReadyForPickUp = 50,
        /// <summary>
        /// Delivering
        /// </summary>
        Delivering = 60,
        /// <summary>
        /// ReturningWarehouse
        /// </summary>
        ReturningWarehouse = 70,
        /// <summary>
        /// ReturningWarehouseFailedDelivery
        /// </summary>
        ReturningWarehouseFailedDelivery = 71,
        /// <summary>
        /// InWarehouse
        /// </summary>
        InWarehouse = 80,
        /// <summary>
        /// InWarehouseFailedDelivery
        /// </summary>
        InWarehouseFailedDelivery = 81,
        /// <summary>
        /// FailedPickUp
        /// </summary>
        FailedPickUp = 90,

        /// <summary>
        /// Called delivering -- not paid
        /// </summary>
        Cancelled = 100,

        /// <summary>
        /// Called delivering -- paid and refund
        /// </summary>
        CancelledWithRefund = 101,

        /// <summary>
        /// Called delivering -- paid but not refund
        /// </summary>
        CancelledNotRefund = 102,
    }
}
